package logica_de_presentacion;

import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.beans.PropertyVetoException;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;

import comun.Capitulo;
import comun.Imagen;
import comun.Pelicula;
import comun.Serie;
import comun.Usuario;
import logica_de_negocio.FaltanDatosEnLaBaseDeDatos;
import logica_de_negocio.GestorSigueSerie;
import logica_de_negocio.gestorCapitulo;
import logica_de_negocio.gestorCapituloVistaNoSi;
import logica_de_negocio.gestorImagen;
import logica_de_negocio.gestorPeli;
import logica_de_negocio.gestorPeliculaVistaNoSi;
import logica_de_negocio.gestorSerie;
import logica_de_negocio.gestorUsuario;


public class MenuInicial extends JFrame implements ActionListener,
		InternalFrameListener {

	/**
	 * Pantalla de menu
	 */
	private static final long serialVersionUID = 1L;

	private JBackGroung desktop;

	// ELEGIR ARCHIVO
	private TablaImagenes tablaImagenes;
	private FormularioAnadirModificarImagen formularioAnadirModificarImagen;

	// DONDE SE ESTABLECE COMO SE ENTRA (ADMINISTRADOR O USUARIO)
	private MenuPrici formularioMenuPrici;
	// LOGIN

	// PELICULA
	private FormularioAnadirModificarPelicula formulariointernalAnadirModificarPelicula;
	private TablaPeliculas formulariointernalTablaPeli;
	private TablaPeliculasSegunUsuario tablaPeliculasSegunUsuario;
	private FormularioBorrarPeliculaPorTitulo formulariointernlaBorrarPeliculaPorTitulo;
	private FormularioBorrarPeliculaPorPais formulariointernalBPPais;
	private FormularioBorrarPeliculaPorDirector formulariointernalBorrarPeliculaPorDirector;
	private FormularioBorrarPeliculaPorActorPrincipal formulariointernalBPActorPrinci;

	// SERIE
	private FormularioAnadirModificarSerie formularioAnadirModificarSerie;
	private TablaSerie tablaSerie;
	private FormularioBorrarSeriePorTitulo formularioBorrarSeriePorTitulo;

	// CAPITULO
	private FormularioAnadirModificarCapitulo formulariointernalAnadirModificarCapitulo;
	private TablaCapitulo formulariointernalTablaCapitulo;
	private FormularioSelecionCapituloPorNombre formularioSelecionCapituloPorNombre;

	// USUARIO
	private FormularioLogin formularioLogin;
	private FormularioAnadirUsuarioAdministrador formularioInternalAnadirUsuarioAdministrador;
	private TablaUsuario formulariointernalTablaUsuario;

	private Agur agur;

	// QUIEN ESTA EN LA APLICACION
	private Usuario usuActual;


	public MenuInicial() {

		super("Bienvenido");
		this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/logica_de_presentacion/imagenes/JEP.png")));		
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		usuActual = null;
		this.setSize(1600, 1000);
		desktop = new JBackGroung(null);
		this.setContentPane(desktop);// EL CONTENERDOR PRINCIPAL
		create();

	}

	public void create() {

		gestorUsuario gu = new gestorUsuario();
		try {
			if (gu.adminPorDefecto()) {
				JOptionPane.showMessageDialog(new Frame(),
						"NO HAY ADMINISTRADORES SE HA CARGADO UNO POR DEFECTO");
			}
		
		} catch (ClassNotFoundException | java.lang.NullPointerException e1) {
			JOptionPane
			.showMessageDialog(null,
					"No existe la base de datos comprueba que existe el archivo sqlite");
			this.dispose();
		}

		formularioMenuPrici = new MenuPrici();
		desktop.add(formularioMenuPrici);
		formularioMenuPrici.toFront();
		formularioMenuPrici.addInternalFrameListener(this);
		// PARA LUEGO PODER ESCUCHAR LO QUE PASO
		try {
			formularioMenuPrici.setSelected(true);
			// SELECIONAMOS LA VENTANA QUE CREAMOS
		} catch (PropertyVetoException e) {
		}
	}

	// CUANDO PULSAMOS ALGUN BOTON
	@Override
	public void actionPerformed(ActionEvent e) {

		try {
			act(e.getActionCommand());
		} catch (PropertyVetoException e1) {
			JOptionPane.showMessageDialog(null,
					"No se puede cargar el formulario.Avise al administrador");
		} catch (ClassNotFoundException e1) {
			JOptionPane
					.showMessageDialog(null,
							"No existe la base de datos comprueba que existe el archivo sqlite");

		}
	}

	public void act(String e) throws PropertyVetoException,
			ClassNotFoundException {// PARA TENER TODOS
		// LOS MENSAJES DE
		// ERROR EN UNA
		switch (e) {
		case "LP":
			FormularioListarPelicula();
			break; // LISTAR PELICULAS
		case "LPP":
			FormularioListarPeliculasPendientes();
			break;
		case "AP":
			FormularioAnadirPeliula();
			break; // ANADIR PELICULA
		case "BPT":
			FormularioBorrarPeliTitu();
			break;// BORRAR PELICULA POR TITULO
		case "BPP":
			FomularioBorrarPeliPais();
			break;
		case "BPD":
			FomularioBorrarPeliDirect();
			break;
		case "BPA":
			FormularioBorrarPeliActorPrin();
			break;
		case "AC":
			FormularioAnadirCapitulo();
			break;
		case "LC":
			listarCap();
			break;
		case "BC":
			borrarCap();
			break;
		case "AS":
			FormularioAnadirSerie();
			break;
		case "LS":
			tablaSerie();
			break;
		case "BS":
			borrarSerie();
			break;
		case "LU":
			listarUsuario();
			break;
		case "LCU":
			listarContraUsuario();
			break;
		case "LI":
			listarImagenes();
			break;
		case "AI":
			anadirImagenes();
			break;
		case "AA":
			addAdministrador();
			break;
		case "LMSS":
			loMasSeguidoSerie();
			break;
		case "LMVP":
			loMasVistoPeli();
			break;
		case "CMV":
			loMasVistoCap();
			break;
		case "RESET":
			resetear();
			break;
		case "CER":
			cerrar();
			break;
		}
	}

	// CUANDO SE CIERRAR LOS VENTANAS INTERNAS
	@Override
	public void internalFrameClosed(InternalFrameEvent e) {// OK

		// MENUPRINCI PARA ELEGIR ENTRE ADMINISTRACION, USUARIO, ANADIR USUARIO
		// Y SALIR
		if (e.getSource() == formularioMenuPrici) {// MENUPRINCI
			String nuevo = formularioMenuPrici.getaccederComo();
			if (nuevo.equals("UA")) {
				login();
			} else if (nuevo.equals("CR")) {
				addUsuario();
			} else if (nuevo.equals("SA")) {
				agur = new Agur();
				try {
					agur.setSelected(true);
				} catch (PropertyVetoException e1) {
				}
				this.add(agur);
				agur.addInternalFrameListener(this);

			}
		}
		// COMPROBAR QUE ES CORRECTO Y LANZA MENU
		if (e.getSource() == formularioLogin) {// OK
			if (formularioLogin.getCorrecto() == true) {
				try {
					usuActual = formularioLogin.getUsu();
					if (usuActual.isEsAdmin()) {
						this.setJMenuBar(crearMenu(true));// CREAR MENU
															// ADMINISTRACION
					} else {
						this.setJMenuBar(crearMenu(false));// CREAR MENU USUARIO
					}
				} catch (FaltanDatosEnLaBaseDeDatos e1) {
					JOptionPane.showMessageDialog(new Frame(), e1.getFalta());
				} catch (ClassNotFoundException e1) {
					JOptionPane.showMessageDialog(new Frame(),
							"No hay informacion en la base de datos");
					this.cerrar();
				}
			} else {
				cerrar();// SALIR DEL PROGRAMA
			}
		}
		// ANADIR USUARIO Y LANZAR MENU
		if (e.getSource() == formularioInternalAnadirUsuarioAdministrador) {// OK
			if (formularioInternalAnadirUsuarioAdministrador.getPasar() == true){
				try {
					usuActual = formularioInternalAnadirUsuarioAdministrador
							.getUsu();
				} catch (FaltanDatosEnLaBaseDeDatos e1) {
					JOptionPane.showMessageDialog(new Frame(), e1.getFalta());
				} catch (ClassNotFoundException e1) {
					JOptionPane.showMessageDialog(new Frame(),
							"No hay informacion en la base de datos");
					this.cerrar();
				}
				this.setJMenuBar(crearMenu(false));// CREAR MENU USUARIO

			}
		}
		// AGUR
		if (e.getSource() == agur) {// OK
			if (agur.getSalir()) {
				System.exit(0);
			}
		}

		if (e.getSource() == tablaImagenes) {

			int id_i = tablaImagenes.getId_i();
			if (id_i != 0) {
				gestorImagen gi = new gestorImagen();
				try {
					Imagen i = gi.getImagenFromId(id_i);
					int re = JOptionPane
							.showConfirmDialog(null,
									"Para Cambiar la imagen debe salir y entrar \n Lo quiere asi?");
					if (re == 0) {
						gestorUsuario gu = new gestorUsuario();
						usuActual.setId_i(i.getId());
						gu.modificarUsuario(usuActual);
					}
				} catch (ClassNotFoundException e1) {

				}
			}

		}

	}

	public void login() {// OK

		formularioLogin = new FormularioLogin();
		this.add(formularioLogin);
		formularioLogin.addInternalFrameListener(this);
		try {
			formularioLogin.setSelected(true);
		} catch (PropertyVetoException e) {
		}
	}

	public void addUsuario() {// OK

		formularioInternalAnadirUsuarioAdministrador = new FormularioAnadirUsuarioAdministrador(
				false);
		this.add(formularioInternalAnadirUsuarioAdministrador);
		formularioInternalAnadirUsuarioAdministrador
				.addInternalFrameListener(this);
		try {
			formularioInternalAnadirUsuarioAdministrador.setSelected(true);
		} catch (PropertyVetoException e) {
		}
	}

	public void addAdministrador() { // OK
		formularioInternalAnadirUsuarioAdministrador = new FormularioAnadirUsuarioAdministrador(
				true);
		this.add(formularioInternalAnadirUsuarioAdministrador);
		formularioInternalAnadirUsuarioAdministrador
				.addInternalFrameListener(this);
		try {
			formularioInternalAnadirUsuarioAdministrador.setSelected(true);
		} catch (PropertyVetoException e) {
		}
	}

	// VOLVER AL LAS TRES OPCIONES
	public void cerrar() {// OK
		
		this.setJMenuBar(null);
		desktop = new JBackGroung(null);
		this.setContentPane(desktop);
		create();
	}

	// FORMULARIO QUE AFECTA A PELICULAS

	public void FormularioAnadirPeliula() throws PropertyVetoException// OK
	{// FORMULARIO DE ANADIR PELICULA
		formulariointernalAnadirModificarPelicula = null;// LIMPIAMOS SI SE A
															// USADO ANTES
		formulariointernalAnadirModificarPelicula = new FormularioAnadirModificarPelicula(
				false, new java.util.Date(), 1, 0);
		desktop.add(formulariointernalAnadirModificarPelicula);
		formulariointernalAnadirModificarPelicula.toFront();
		formulariointernalAnadirModificarPelicula.setVisible(true);
		formulariointernalAnadirModificarPelicula.setSelected(true);// LANZA
																	// EXCEPCIONES

	}

	public void FormularioListarPelicula() throws PropertyVetoException, ClassNotFoundException { // OK
		// FORMULARIO LISTAR PELICULA
		gestorPeli gp = new gestorPeli();
		if (gp.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay peliculas");
		} else {
			formulariointernalTablaPeli = new TablaPeliculas(this, usuActual);
			formulariointernalTablaPeli.cargarPeliculas();
			desktop.add(formulariointernalTablaPeli);
			formulariointernalTablaPeli.setSelected(true);
		}
	}

	private void FormularioListarPeliculasPendientes()
			throws PropertyVetoException, ClassNotFoundException {// AL REVES
		gestorPeliculaVistaNoSi gpvns = new gestorPeliculaVistaNoSi();

		if (gpvns.isId_uPen(usuActual.getId_u())) {

			tablaPeliculasSegunUsuario = new TablaPeliculasSegunUsuario(this,
					usuActual);
			tablaPeliculasSegunUsuario.cargarPeliculas();
			desktop.add(tablaPeliculasSegunUsuario);
			tablaPeliculasSegunUsuario.setSelected(true);

		} else {
			JOptionPane.showMessageDialog(new Frame(),
					"No tiene nada pendiente");
		}

	}

	public void FormularioBorrarPeliTitu() throws PropertyVetoException, ClassNotFoundException {// OK
		// FORMULARIO BORRAR PELICULAS
		gestorPeli gp = new gestorPeli();
		if (gp.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay peliculas");

		} else {
			formulariointernlaBorrarPeliculaPorTitulo = new FormularioBorrarPeliculaPorTitulo(
					this);
			desktop.add(formulariointernlaBorrarPeliculaPorTitulo);
			formulariointernlaBorrarPeliculaPorTitulo.setSelected(true);
		}
	}

	public void FomularioBorrarPeliPais() throws PropertyVetoException, ClassNotFoundException {// OK

		gestorPeli gp = new gestorPeli();
		if (gp.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay peliculas");

		} else {
			formulariointernalBPPais = new FormularioBorrarPeliculaPorPais();
			desktop.add(formulariointernalBPPais);
			formulariointernalBPPais.setSelected(true);
		}
	}

	public void FomularioBorrarPeliDirect() throws PropertyVetoException, ClassNotFoundException {// OK

		gestorPeli gp = new gestorPeli();

		if (gp.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay peliculas");

		} else {
			formulariointernalBorrarPeliculaPorDirector = new FormularioBorrarPeliculaPorDirector(
					this);
			desktop.add(formulariointernalBorrarPeliculaPorDirector);
			formulariointernalBorrarPeliculaPorDirector.setSelected(true);
		}
	}

	public void FormularioBorrarPeliActorPrin() throws PropertyVetoException, ClassNotFoundException { // OK

		gestorPeli gp = new gestorPeli();
		if (gp.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay peliculas");

		} else {
			formulariointernalBPActorPrinci = new FormularioBorrarPeliculaPorActorPrincipal(
					this);
			desktop.add(formulariointernalBPActorPrinci);
			formulariointernalBPActorPrinci.setSelected(true);
		}
	}

	// FORMULARIO QUE AFECTA A CAPITULOS
	public void FormularioAnadirCapitulo() throws PropertyVetoException, ClassNotFoundException {

		formulariointernalAnadirModificarCapitulo = new FormularioAnadirModificarCapitulo(
				false, 0, 0, new java.util.Date());
		desktop.add(formulariointernalAnadirModificarCapitulo);
		formulariointernalAnadirModificarCapitulo.setSelected(true);
	}

	public void listarCap() throws PropertyVetoException, ClassNotFoundException {// OK

		formulariointernalTablaCapitulo = null;

		gestorCapitulo gc = new gestorCapitulo();
		if (gc.estaVacia() == true) {
			JOptionPane.showMessageDialog(new Frame(), "No hay capitulos");
		} else {

			formulariointernalTablaCapitulo = new TablaCapitulo(this, usuActual);
			formulariointernalTablaCapitulo.cargarCapitulo();
			desktop.add(formulariointernalTablaCapitulo);
			formulariointernalTablaCapitulo.setSelected(true);

		}
	}

	public void borrarCap() throws PropertyVetoException,
			ClassNotFoundException {

		gestorCapitulo gc = new gestorCapitulo();
		if (gc.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay capitulo");
		} else {
			formularioSelecionCapituloPorNombre = new FormularioSelecionCapituloPorNombre(
					this);
			desktop.add(formularioSelecionCapituloPorNombre);
			formularioSelecionCapituloPorNombre.setSelected(true);
		}
	}

	// SERIE
	private void FormularioAnadirSerie() throws PropertyVetoException {

		formularioAnadirModificarSerie = new FormularioAnadirModificarSerie(
				false, 0, new java.util.Date(), new java.util.Date());
		desktop.add(formularioAnadirModificarSerie);
		formularioAnadirModificarSerie.setSelected(true);
	}

	private void tablaSerie() throws PropertyVetoException,
			ClassNotFoundException {

		gestorSerie gs = new gestorSerie();
		if (gs.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay Series");
		} else {
			tablaSerie = new TablaSerie(this, usuActual);
			tablaSerie.cargarSerie();
			desktop.add(tablaSerie);
			tablaSerie.setSelected(true);
		}
	}

	private void borrarSerie() throws ClassNotFoundException {

		gestorSerie gs = new gestorSerie();
		if (gs.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay Series");
		} else {
			formularioBorrarSeriePorTitulo = new FormularioBorrarSeriePorTitulo();
			desktop.add(formularioBorrarSeriePorTitulo);
			try {
				formularioBorrarSeriePorTitulo.setSelected(true);
			} catch (PropertyVetoException e) {
			}
			formularioBorrarSeriePorTitulo.toFront();
		}
	}

	// FORMULARIO QUE AFECTA A USUARIOS
	public void listarUsuario() throws PropertyVetoException,
			ClassNotFoundException { // OK

		formulariointernalTablaUsuario = null;// POR SI ANTES SE HA USADO
		gestorUsuario gu = new gestorUsuario();
		if (gu.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay usuarios");
		} else {
			formulariointernalTablaUsuario = new TablaUsuario(this,
					false, usuActual);
			formulariointernalTablaUsuario.cargarUsuario();
			desktop.add(formulariointernalTablaUsuario);
			formulariointernalTablaUsuario.setSelected(true);
		}
	}

	public void listarContraUsuario() throws PropertyVetoException,
			ClassNotFoundException { // OK

		formulariointernalTablaUsuario = null;
		gestorUsuario gu = new gestorUsuario();
		if (gu.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay usuarios");
		} else {
			formulariointernalTablaUsuario = new TablaUsuario(this,
					true, usuActual);
			formulariointernalTablaUsuario.cargarUsuario();
			desktop.add(formulariointernalTablaUsuario);
			formulariointernalTablaUsuario.setSelected(true);
		}
	}

	public void listarImagenes() throws ClassNotFoundException {

		gestorImagen gi = new gestorImagen();
		if (gi.estaVacia()) {
			JOptionPane.showMessageDialog(new Frame(), "No hay imagenes");
		} else {
			tablaImagenes = new TablaImagenes(this, usuActual);
			tablaImagenes.cargar();
			tablaImagenes.addInternalFrameListener(this);
			desktop.add(tablaImagenes);
		}
	}

	private void anadirImagenes() throws ClassNotFoundException {
		
		formularioAnadirModificarImagen = new FormularioAnadirModificarImagen(
				this);
		desktop.add(formularioAnadirModificarImagen);
		try {
			formularioAnadirModificarImagen.setSelected(true);
		} catch (PropertyVetoException e) {
		}
		formularioAnadirModificarImagen.toFront();

	}

	//FORMULARIO QUE AFECTA A VISTO

	public void loMasSeguidoSerie() throws ClassNotFoundException {// OK

		GestorSigueSerie gss = new GestorSigueSerie();
		if (gss.estaVacia() == true) {
			JOptionPane
					.showMessageDialog(new Frame(),
							"No hay niguna capitulo marcado por los usuarios como vista");
		} else {
			gestorSerie gs = new gestorSerie();
			Serie s;
			try {
				s = gs.getSerie(gss.id_sMasSeguida());
				JOptionPane.showMessageDialog(new Frame(), s.toString());
			} catch (FaltanDatosEnLaBaseDeDatos e) {
				JOptionPane.showMessageDialog(new Frame(), e.toString());
			}
		}
	}

	public void loMasVistoPeli() throws ClassNotFoundException {// OK

		gestorPeliculaVistaNoSi gpvns = new gestorPeliculaVistaNoSi();
		if (gpvns.estaVacia()) {
			JOptionPane
					.showMessageDialog(new Frame(),
							"No hay niguna pelicula marcada por los usuarios como vista");
		} else {
			gestorPeli gp = new gestorPeli();
			Pelicula p;
			try {
				p = gp.getPelicula(gpvns.id_pMasVista());
				JOptionPane.showMessageDialog(new Frame(), p.toString());
			} catch (FaltanDatosEnLaBaseDeDatos e) {

			}
		}

	}

	/**
	 * Saca un mensaje por pantalla del capitulo mas visto por los usuarios si
	 * lo hubiera. Si no saca un mensaje indicandolo.
	 * 
	 * @throws ClassNotFoundException
	 *             Se produce cuando no existe la base de datos
	 */
	private void loMasVistoCap() throws ClassNotFoundException {
		gestorCapituloVistaNoSi gcvns = new gestorCapituloVistaNoSi();
		if (gcvns.estaVacia()) {
			JOptionPane
					.showMessageDialog(new Frame(),
							"No hay nigun capitulo marcado por los usuarios como vista");
		} else {
			gestorCapitulo gc = new gestorCapitulo();

			Capitulo c;
			try {
				c = gc.getCapitulo(gcvns.id_cMasVista());
				JOptionPane.showMessageDialog(new Frame(), c.toString());
			} catch (FaltanDatosEnLaBaseDeDatos e) {
				JOptionPane.showMessageDialog(new Frame(), e.toString());
			}
		}
	}

	public void resetear() throws ClassNotFoundException {

		boolean resetPeli = new gestorPeli().reset();
		boolean resetCap = new gestorCapitulo().reset();
		boolean resetSerie = new gestorSerie().reset();
		boolean restUsu = new gestorUsuario().reset();
		boolean restImag = new gestorImagen().reset();

		if (resetPeli) {
			if (resetCap) {
				if (resetSerie) {
					if (restUsu) {
						if (restImag) {
							JOptionPane.showMessageDialog(null,
									"Se ha borrado todo de la base de datos");
							JOptionPane.showMessageDialog(null,
									"Recuerde crear un administrador para el sistema \n Sino se utilizara uno por defecto.");
						}
					}
				}
			}
		}

	}

	public JDesktopPane getPanelEscritorio() {// OK
		return desktop;
	}

	// MENU_BAR
	public JMenuBar crearMenu(boolean controlTotal) {// OK
		// CONNTROL TOTAL SOLO EL ADMINISTRADOR

		if (usuActual.getId_i() == 0) {
			desktop = new JBackGroung(null);
		} else {
			gestorImagen gi = new gestorImagen();
			try {
				Imagen i = gi.getImagenFromId(usuActual.getId_i());
				desktop = new JBackGroung(i.getImg());
			} catch (ClassNotFoundException e) {
				JOptionPane
						.showMessageDialog(null,
								"Su imagen no existe en la base de datos de cargara el fondo por defecto.");
				desktop = new JBackGroung(null);
			}

		}
		this.setContentPane(desktop);

		JMenuBar menubar;
		JMenu menu, submenu, subbmenu;// LOS MENUS
		JMenuItem menuItem;// LAS LIENAS DEL MENU

		// CREAR BARRA DE MENU
		menubar = new JMenuBar();

		// EL MENU
		menu = new JMenu("Elija la opcion");

		// ANADIR A LA BARRA EL PRIMER NUMERO
		menubar.add(menu);

		// ANADIR OPCIONES(Pelicula)Submenu
		submenu = new JMenu("Pelicula:");
		menu.add(submenu);// Metemos el submenu al menu

		// LISTAR
		menuItem = new JMenuItem("Listar pelicula");
		menuItem.setMnemonic(KeyEvent.VK_L);
		menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,
				ActionEvent.ALT_MASK));
		menuItem.setToolTipText("Listar las peliculas con las caracteristicas  deseadas y en el orden deseado");
		menuItem.setActionCommand("LP");
		menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
		submenu.add(menuItem);

		if (controlTotal == false) {
			menuItem = new JMenuItem("Listar pelicula pendientes");
			menuItem.setMnemonic(KeyEvent.VK_L);
			menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
					ActionEvent.ALT_MASK));
			menuItem.setToolTipText("Listar las peliculas Pendientes con las caracteristicas deseadas\n y en el orden deseado");
			menuItem.setActionCommand("LPP");
			menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
			submenu.add(menuItem);
		}

		if (controlTotal == true) {
			// ANADIR
			menuItem = new JMenuItem("Anadir pelicula");
			menuItem.setMnemonic(KeyEvent.VK_A);
			menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
					ActionEvent.ALT_MASK));
			menuItem.setToolTipText("Anadir la pelicula a la base de datos");
			menuItem.setActionCommand("AP");
			menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
			submenu.add(menuItem);

			// BORRAR
			subbmenu = new JMenu("Borrar pelicula");
			submenu.add(subbmenu);

			// OPC DE BORRADO
			menuItem = new JMenuItem("Borrar por Titulo");
			menuItem.setToolTipText("Borrar la pelicula por titulo de la base de datos");
			menuItem.setActionCommand("BPT");
			menuItem.addActionListener(this);
			subbmenu.add(menuItem);

			menuItem = new JMenuItem("Borrar por Pais de procedencia");
			menuItem.setToolTipText("Borrar la pelicula por pais de la base de datos");
			menuItem.setActionCommand("BPP");
			menuItem.addActionListener(this);
			subbmenu.add(menuItem);

			menuItem = new JMenuItem("Borrar por Director");
			menuItem.setToolTipText("Borrar la director por director de la base de datos");
			menuItem.setActionCommand("BPD");
			menuItem.addActionListener(this);
			subbmenu.add(menuItem);

			menuItem = new JMenuItem("Por Actor Principal");
			menuItem.setToolTipText("Borrar la pelicula por actor principal de la base de datos");
			menuItem.setActionCommand("BPA");
			menuItem.addActionListener(this);
			subbmenu.add(menuItem);

		}
		// SERIE
		submenu = new JMenu("Serie");
		menu.add(submenu);// Metemos el submenu al menu

		// Submenus
		menuItem = new JMenuItem("Listar");
		menuItem.setToolTipText("Listar las series");
		menuItem.setActionCommand("LS");
		menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
		submenu.add(menuItem);
		if (controlTotal) {
			menuItem = new JMenuItem("Anadir");
			menuItem.setToolTipText("Anadir Serie");
			menuItem.setActionCommand("AS");
			menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
			submenu.add(menuItem);

			menuItem = new JMenuItem("Borrar");
			menuItem.setToolTipText("Borrar Serie");
			menuItem.setActionCommand("BS");
			menuItem.addActionListener(this);
			submenu.add(menuItem);
		}

		// CAPITULO
		submenu = new JMenu("Capitulo");
		menu.add(submenu);// Metemos el submenu al menu

		// Submenus
		menuItem = new JMenuItem("Listar");
		menuItem.setToolTipText("Listar los capitulos");
		menuItem.setActionCommand("LC");
		menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
		submenu.add(menuItem);
		if (controlTotal == true) {

			menuItem = new JMenuItem("Anadir");
			menuItem.setToolTipText("Anadir capitulos");
			menuItem.setActionCommand("AC");
			menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
			submenu.add(menuItem);

			menuItem = new JMenuItem("Borrar segun Serie");
			menuItem.setToolTipText("Borrar el capitulo de indicando la serie");
			menuItem.setActionCommand("BC");
			menuItem.addActionListener(this);
			submenu.add(menuItem);

			// USUARIO
			submenu = new JMenu("Usuario");
			menu.add(submenu);// Metemos el submenu al menu

			// Submenus
			menuItem = new JMenuItem("Listar");

			menuItem.setToolTipText("Listar Usuarios, ver sus comentario o sancionarlos");
			menuItem.setActionCommand("LU");
			menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
			submenu.add(menuItem);

			menuItem = new JMenuItem("Recuperar Contrasena");
			menuItem.setToolTipText("Recuperar contrasena de un usuario o sancionarlo");
			menuItem.setActionCommand("LCU");
			menuItem.addActionListener(this);
			submenu.add(menuItem);

			menuItem = new JMenuItem("Anadir administrador");
			menuItem.setToolTipText("Anadir un administardor a la base de datos");
			menuItem.setActionCommand("AA");
			menuItem.addActionListener(this);
			submenu.add(menuItem);
		}
		// Fondo
		submenu = new JMenu("Imagenes");
		menu.add(submenu);
		// Submenus
		menuItem = new JMenuItem("Listar imagenes");
		menuItem.setToolTipText("Listar Imagen almacenadas");
		menuItem.setActionCommand("LI");
		menuItem.addActionListener(this);// LE PONEMOS EL ESCUCHADOR
		submenu.add(menuItem);

		menuItem = new JMenuItem("Anadir imagenes");
		menuItem.setToolTipText("Anadir imagenes a la base de datos");
		menuItem.setActionCommand("AI");
		menuItem.addActionListener(this);
		submenu.add(menuItem);

		//Genericos
		menuItem = new JMenuItem("Lo mas Seguido(En Series)");
		menuItem.setMnemonic(KeyEvent.VK_S);
		menuItem.setActionCommand("LMSS");
		menu.add(menuItem);
		menuItem.addActionListener(this);

		menuItem = new JMenuItem("La pelicula mas vista");
		menuItem.setMnemonic(KeyEvent.VK_P);
		menuItem.setActionCommand("LMVP");
		menu.add(menuItem);
		menuItem.addActionListener(this);

		menuItem = new JMenuItem("El capitulo mas vista");
		menuItem.setActionCommand("CMV");
		menu.add(menuItem);
		menuItem.addActionListener(this);
		
		if (controlTotal == true) {
			menuItem = new JMenuItem("RESETEAR BASE DE DATOS");
			menuItem.setActionCommand("RESET");
			menuItem.setToolTipText("Borra toda la base de datos del sistema");
			menuItem.addActionListener(this);
			menu.add(menuItem);
		}
		//CERRAR
		menuItem = new JMenuItem("Cerrar");
		menuItem.setActionCommand("CER");
		menu.add(menuItem);
		menuItem.addActionListener(this);
		menuItem.setMnemonic(KeyEvent.VK_C);
		return menubar;
	}

	public void internalFrameOpened(InternalFrameEvent e) {
	}// AL ABBRIR

	@Override
	public void internalFrameIconified(InternalFrameEvent e) {
	}// MINIMIZAR

	@Override
	public void internalFrameDeiconified(InternalFrameEvent e) {
	}// DESMINIMIZAR

	@Override
	public void internalFrameDeactivated(InternalFrameEvent e) {
	}// DESELOCIONAR

	@Override
	public void internalFrameClosing(InternalFrameEvent e) {
	}// CERRANDO

	@Override
	public void internalFrameActivated(InternalFrameEvent arg0) {
	}// SELECIONADO

}
